package com.orzxlee.InterviewQuestions.Java_Web_Base;

public class Demo {

    public static void main(String[] args) {


        //1.原生 jdbc 操作数据库流程
        //fun1();

        //2.什么要使用 PreparedStatement？
        //fun2();

        //3.Http 协议 http 的长连接和短连接
        //fun3();

        //4.http 常见的状态码有哪些?
        //fun4();

        //5.GET 和 POST 的区别?
        //fun5();

        //6.http 中重定向和请求转发的区别?
        //fun6();

        //7.Cookie 和 Session 的区别?
        //fun7();

        //8.jsp 和Servlet 有什么区别,jsp 有哪些域对象和内置对象及他们的作用?
        //fun8();

        //9.什么是 xml，使用 xml 的优缺点，xml 的解析器有哪几种，分别有什么区别？
        //fun9();

    }

    private static void fun9() {
    /*
       1.xml 是一种可扩展性标记语言，支持自定义标签（使用前必须预定义）使用 DTD 和 XML Schema 标准化 XML 结构。

       Xml解析器有2种,DOM 和SAX
       解析方式不同:
            DOM树形结构加载入内存
            SAX 采用的是事件模型

     */
    }

    private static void fun8() {
    /*
        1.jsp 和Servlet 有什么区别
        jsp 是 html 页面中内嵌的 Java 代码，侧重页面显示；
        Servlet 是 html 代码和 Java 代码分离，侧重逻辑控制;

        2.域对象
           （1）pageContext page 域-指当前页面，在当前 jsp 页面有效，跳到其它页面失效
           （2）request request 域-指一次请求范围内有效，从 http 请求到服务器处理结束，返回响应的整个过程。
               在这个过程中使用 forward（请求转发）方式跳转多个 jsp，在这些页面里你都可以使用这个变量
           （3）session session 域-指当前会话有效范围，浏览器从打开到关闭过程中，转发、重定向均可以使用
           （4）application context 域-指只能在同一个 web 中使用，服务器未关闭或者重启，数据就有效
        3.内置对象
        request 一次请求,作用域jsp
        response 一次响应,作用域jsp
        session 生命周期默认30分钟,作用域会话期间
        application 伴随服务器生命周期,与session对象相比，application对象生命周期更长
        out 对象用于在Web浏览器内输出信息
        pageContext pageContext 对象的作用是取得任何范围的参数，通过它可以获取 JSP页面的out、request、reponse、session、application 等对象
        config config 对象的主要作用是取得服务器的配置信息。
        page  代表JSP本身，只有在JSP页面内才是合法的
        exception 显示异常信息，必须在 page 指令中设定< %@ page isErrorPage="true" %>才能使用,在一般的 JSP 页面中使用该对象将无法编译JSP 文件
     */
    }

    private static void fun7() {
    /*
        cookie:数据保存在客户端 ,关闭浏览器失效
        session:数据保存在服务器端,存在于会话生命周期中.默认保存时间30分钟


     */
    }

    private static void fun6() {
    /*
        1.forward 转发  转发是服务器行为
        2.sendRedirect 重定向 重定向是客户端行为
        重定向特点：两次请求，浏览器地址发生变化，可以访问自己 web 之外的资源，传输的数据会丢失。
        请求转发特点：一次请求，浏览器地址不变，访问的是自己本身的 web 资源，传输的数据不会丢失

     */
    }

    private static void fun5() {
    /*
        1.Get 请求数据通过RUL地址传输,长度受限于URL地址长度限制
          Post 把数据放置在Http包的请求体中

        2.Post的数据传输方式相对于get 更安全

        3.Get产生一个TCP数据包,Http Head 和 data(数据) 一起发送,服务器响应数据
          Post产生两个TCP数据包 ,先发送Http,服务器响应100 (continue),在发送 data(数据),服务器响应200 ok（返回数据）

        4.Get一般是用来获取数据，Post提交数据
     */
    }

    private static void fun4() {
    /*
        200 OK //客户端请求成功
        301 Moved Permanently（永久移除)，请求的 URL 已移走。Response 中应该包含一个 Location URL, 说明资源现在所处的位置
        302 found 重定向
        400 Bad Request //客户端请求有语法错误，不能被服务器所理解
        401 Unauthorized //请求未经授权，这个状态代码必须和 WWW-Authenticate 报头域一起使用
        403 Forbidden //服务器收到请求，但是拒绝提供服务
        404 Not Found //请求资源不存在，eg：输入了错误的 URL
        500 Internal Server Error //服务器发生不可预期的错误
        503 Server Unavailable //服务器当前不能处理客户端的请求，一段时间后可能恢复正常

     */
    }

    private static void fun3() {
    /*
        HTTP 协议有 HTTP/1.0 版本 默认使用的是短连接,浏览器和服务器每进行一次 HTTP 操作，就建立一次连接，任务结束就中断连接
                   HTTP/1.1 版本 默认保持长(持久)连接 ，数据传输完成了保持 TCP 连接不断开（不发 RST 包、不四次握手），等待在同域名下继续用这个通道传输数据

     */
    }

    private static void fun2() {
    /*
        PreparedStatement 接口继承 Statement
        1.可读性高
        2.PreparedStatement 尽最大可能提高性能.DB 有缓存机制，相同的预编译语句再次被调用不会再次需要编译
        3.防止Sql注入问题

     */
    }

    private static void fun1() {
    /*
        第一步：Class.forName()加载数据库连接驱动；
        第二步：DriverManager.getConnection()获取数据连接对象;
        第三步：根据 SQL 获取 sql 会话对象，有 2 种方式 Statement、PreparedStatement ;
        第四步：执行 SQL 处理结果集，执行 SQL 前如果有参数值就设置参数值 setXXX();
        第五步：关闭结果集、关闭会话、关闭连接。

     */
    }
}
